package com.mall.framework.shiro.session;

import com.mall.common.enums.OnlineStatus;
import org.apache.shiro.session.mgt.SimpleSession;

/**
 * 在线用户会话属性
 * Created by zhonglin on 2020/4/8.
 */
public class OnlineSession
    extends SimpleSession {

  private static final long serialVersionUID = 1L;

  /**
   * 用户ID
   */
  private Long userId;

  /**
   * 用户名称
   */
  private String loginName;

  /**
   * 部门名称
   */
  private String deptName;

  /**
   * 用户头像
   */
  private String avatar;

  /**
   * 登录IP地址
   */
  private String host;

  /**
   * 浏览器类型
   */
  private String browser;

  /**
   * 操作系统
   */
  private String os;

  /**
   * 在线状态
   */
  private OnlineStatus status = OnlineStatus.on_line;

  /**
   * 属性是否改变 优化session数据同步
   */
  private transient boolean attributeChanged = false;

  @Override
  public String getHost() {

    return host;
  }

  @Override
  public void setHost(String host) {

    this.host = host;
  }

  public String getBrowser() {

    return browser;
  }

  public void setBrowser(String browser) {

    this.browser = browser;
  }

  public String getOs() {

    return os;
  }

  public void setOs(String os) {

    this.os = os;
  }

  public Long getUserId() {

    return userId;
  }

  public void setUserId(Long userId) {

    this.userId = userId;
  }

  public String getLoginName() {

    return loginName;
  }

  public void setLoginName(String loginName) {

    this.loginName = loginName;
  }

  public String getDeptName() {

    return deptName;
  }

  public void setDeptName(String deptName) {

    this.deptName = deptName;
  }

  public OnlineStatus getStatus() {

    return status;
  }

  public void setStatus(OnlineStatus status) {

    this.status = status;
  }

  public void markAttributeChanged() {

    this.attributeChanged = true;
  }

  public void resetAttributeChanged() {

    this.attributeChanged = false;
  }

  public boolean isAttributeChanged() {

    return attributeChanged;
  }

  public String getAvatar() {

    return avatar;
  }

  public void setAvatar(String avatar) {

    this.avatar = avatar;
  }

  @Override
  public void setAttribute(Object key,
                           Object value) {

    super.setAttribute(key, value);
  }

  @Override
  public Object removeAttribute(Object key) {

    return super.removeAttribute(key);
  }

}
